<template>
  <div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
    <!-- Background of PhotoSwipe.
    It's a separate element as animating opacity is faster than rgba().-->
    <div class="pswp__bg"></div>

    <!-- Slides wrapper with overflow:hidden. -->
    <div class="pswp__scroll-wrap">
      <!-- Container that holds slides.
          PhotoSwipe keeps only 3 of them in the DOM to save memory.
      Don't modify these 3 pswp__item elements, data is added later on.-->
      <div class="pswp__container">
        <div class="pswp__item"></div>
        <div class="pswp__item"></div>
        <div class="pswp__item"></div>
      </div>

      <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
      <div class="pswp__ui pswp__ui--hidden">
        <div class="pswp__top-bar">
          <!--  Controls are self-explanatory. Order can be changed. -->
          <div class="pswp__counter"></div>

          <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
          <div class="pswp__preloader">
            <div class="pswp__preloader__icn">
              <div class="pswp__preloader__cut">
                <div class="pswp__preloader__donut"></div>
              </div>
            </div>
          </div>
        </div>

        <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
          <div class="pswp__share-tooltip"></div>
        </div>

        <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"></button>
        
        <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"></button>

        <div class="pswp__caption">
          <div class="pswp__caption__center"></div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import "photoswipe/dist/photoswipe.css";
import "photoswipe/dist/default-skin/default-skin.css";
import PhotoSwipe from "photoswipe";
import PhotoSwipeUI_Default from "photoswipe/dist/photoswipe-ui-default";

export default {
  props: {
    open: {
      type: Boolean,
      default: false
    },
    items: {
      type: Array,
      default: false
    }
  },
  watch: {
    open(value) {
      if (value) {
        this.show();
      }
    }
  },
  methods: {
    show() {
      this.photoSwipe = new PhotoSwipe(
        this.$el,
        PhotoSwipeUI_Default,
        this.items,
        {
          history: false,
          focus: false

          // showAnimationDuration: 0,
          // hideAnimationDuration: 0
        }
      );

      this.photoSwipe.listen("close", () => {
        this.$emit("update:open", false);
      });
      this.photoSwipe.listen("imageLoadComplete", () => {
        Promise.all(
          this.items.map(item => {
            return new Promise(resolve => {
              let image = new Image();
              image.src = item.src;
              image.onload = () => {
                item.w = image.naturalWidth;
                item.h = image.naturalHeight;
                resolve();
              };
            });
          })
        ).then(() => {
          this.photoSwipe.updateSize(true);
        });
      });
      this.photoSwipe.init();
    }
  }
};
</script>
